home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / print / lq15tsr.zip / SETP1524.ASM < prev    next >
Assembly Source File  |  1988-02-05  |  28KB  |  585 lines

  1. ;
  2. interrupts    segment at 0h                      ;interrupt table segment
  3.               org 9h*4
  4. keyboard_int  dw 2 dup (?)                       ;interrupt 9 vector
  5. interrupts    ends
  6. ;
  7. rom_bios_data segment at 40h                     ;ROM BIOS data area segment
  8.               org 60h
  9. ;
  10. cursor_mode   dw ?                      ;starting and ending cursor scan lines
  11. rom_bios_data ends
  12. ;
  13. rom           segment at 0F000h                  ;ROM segment
  14.               org 0FFFEh
  15. ;
  16. machine_id    db ?                ;ID byte identifies machine as PCjr or other
  17. rom           ends
  18. ;
  19. code          segment para public 'code'         ;code segment
  20.               assume cs:code
  21.               org 100h
  22. ;
  23. begin:        jmp initialize                     ;goto initialization routine
  24. ;
  25.               db '(C) Copyright 1986, Ziff-Davis Publishing Company ', 1Ah
  26.  
  27. shift_right   equ  1h
  28. shift_left    equ  2h
  29. shift_ctrl    equ  4h
  30. shift_alt     equ  8h 
  31. shift_trigger equ  shift_right+shift_left ; 
  32.  
  33. column_count  dw ?              ;width of window in columns 
  34. cursor_type   dw ?              ;cursor scan line definition 
  35. setup_status  db 0              ;indicator if printer window is already active
  36. display_mode  dw ?              ;current crt display mode 
  37. page_no       dw ?              ;current displayed page 
  38. attribute1    db 4Fh            ;window attribute bytes 
  39. attribute2    db 70h ; 
  40. display_table db 2Dh,29h        ;display re-enable values for modes 2 and 3 
  41. video         dw 0B800h,0B900h,0BA00h,0BB00h     ;starting addresses of video 
  42.                                                  ;memory for CGA pages 0 - 3
  43. ;
  44. mono_video    dw 0B000h                          ;video segment address for
  45.                                                  ;monochrome adapter
  46. ;
  47. old_kb_int              label dword
  48. old_keyboard_int        dw 2 dup (?)             ;storage for old keyboard
  49.                                                  ;interrupt vector
  50. ;
  51. ;----------------------------------------------------------------------------
  52. ;Text of the Printer Setup Menu window.
  53. ;After initialization, text and attribute bytes are combined and stored
  54. ;in the WINDOW_TEXT area, and this area is used to store the contents of
  55. ;the screen that underlie the window when the window is called up.
  56. ;----------------------------------------------------------------------------
  57. ;
  58. window_buffer           label word
  59. buffer_text             db 201,26 dup (205),187
  60.                         db 186,'    PRINTER SETUP MENU    ',186
  61.                         db 186,'    PANASONIC KXP-1524    ',186
  62.                         db 199,26 dup (196),182
  63.                         db 186,' F1    Compressed Mode    ',186
  64.                         db 186,' F2    Expanded Mode      ',186
  65.                         db 186,' F3    Emphasized Mode    ',186
  66.                         db 186,' F4    Quality Mode       ',186
  67.                         db 186,' F5    Elite/Pica Mode    ',186
  68.                         db 186,' F6    Miniature Mode     ',186
  69.                         db 186,' F7    Skip Perforation   ',186
  70.                         db 186,' F8    Form Feed/Line Feed',186
  71.                         db 186,' F9    Reset Top-of-Form  ',186
  72.                         db 186,' F10   Reset Print Modes  ',186
  73.                         db 186,' ESC   Exit               ',186
  74.                         db 199,26 dup (196),182
  75.                         db 186,' Unshifted:   Toggle ON   ',186
  76.                         db 186,' Shifted:     Toggle OFF  ',186
  77.                         db 200,26 dup (205),188
  78.                         db 532 dup (?)
  79. ;
  80. ;Storage area for the combination of text and attribute bytes that
  81. ;form the window image.
  82. ;
  83. window_bytes  label byte
  84. window_text   dw 532 dup (?)
  85. ;
  86. ;Control code strings for all of the printer setup options.
  87. ;
  88. code_table:   db 15,255,14 dup (0)                      ;compressed mode on .
  89.               db 27,87,31,255,12 dup (0)                ;expanded mode on   .
  90.               db 27,69,255,13 dup (0)                   ;emphasized mode on .
  91.               db 27,120,1,255,27,85,49,9 dup (0)        ;quality mode on    .
  92.               db 27,77,255,13 dup (0)                   ;elite mode on      .
  93.               db 15,27,83,0,27,65,6,255,8 dup (0)       ;miniature mode on  .
  94.               db 27,78,6,255,12 dup (0)                 ;perfskip on        .
  95.               db 12,255,14 dup (0)                      ;Form Feed          .
  96.  
  97.               db 27,64,255,13 dup (0)                   ;reset top-of-form  .
  98.               db 27,64,255,13 dup (0)                   ;reset print modes  .
  99. ;
  100.               db 18,255,14 dup (0)                      ;compress off       .
  101.               db 27,87,30,255,12 dup (0)                ;expand off         .
  102.               db 27,70,255,13 dup (0)                   ;emphasize off      .
  103.               db 27,120,0,255,27,85,48,9 dup (0)        ;quality mode  off  .
  104.               db 27,80,255,13 dup (0)                   ;pica  on           .
  105.               db 18,27,84,27,50,255,10 dup (0)          ;miniature off      .
  106.               db 27,79,255,13 dup (0)                   ;perfskip off       .
  107.               db 13,10,255,13 dup (0)                   ;line feed          .
  108. ;
  109. ;---------------------------------------------------------------------------
  110. ;Execution comes here, to the main body of the program, when an interrupt 9
  111. ;is generated from the keyboard.  Registers are saved, then the keypress is
  112. ;checked and compared to the key combination that activates the menu window.
  113. ;---------------------------------------------------------------------------
  114. ;
  115. main          proc near
  116.               sti                                ;enable software interrupts
  117.               push ax                            ;save all registers
  118.               push bx
  119.               push cx
  120.               push dx
  121.               push si
  122.               push di
  123.               push ds
  124.               push es
  125.               push ax                   ;save ax for call to old routine
  126.               in al,0A0h                         ;re-enable NMI on PCjr
  127.               pop ax                             ;restore ax
  128.               pushf          ;simulate interrupt call to old keyboard routine
  129.               call old_kb_int                    ;call old routine
  130.               mov ah,2                   ;check status of the shift keys
  131.               int 16h
  132.               and al,shift_trigger               ;trigger keys depressed?
  133.               cmp al,shift_trigger
  134.               je do_program                      ;yes, then skip exit routine
  135. ;
  136. ;Exit routine is the common point of exit for all routines in the program.
  137. ;
  138. exit:         pop es
  139.               pop ds
  140.               pop di
  141.               pop si
  142.               pop dx
  143.               pop cx
  144.               pop bx
  145.               pop ax
  146.               iret
  147. ;
  148. ;Execution comes here when the proper key combination, Ctrl/Rt-Shift, is
  149. ;pressed.  First task is to check whether or not the window is already open.
  150. ;
  151. do_program:   push cs                   ;set es and ds to the code segment
  152.               pop ds
  153.               push cs
  154.               pop es
  155.               cmp setup_status,0                 ;is the window already open?
  156.               jne exit                           ;yes, then ignore request
  157. ;
  158. ;----------------------------------------------------------------------------
  159. ;Check current video mode.  If it's mode 2, 3, or 7, then set the window
  160. ;status flag, store the mode number and page number, save the cursor type,
  161. ;and hide the cursor.  If any other display mode is active instead, ignore
  162. ;the request and exit.
  163. ;----------------------------------------------------------------------------
  164. ;
  165.               mov ah,15                          ;get page and mode numbers
  166.               int 10h                            ;al=mode, bh=page
  167.               cmp al,2                  ;is crt now in an acceptable mode?
  168.               je prog0                           ;yes, then continue
  169.               cmp al,3
  170.               je prog0
  171.               cmp al,7